﻿////给定 n 个区间[li, ri]，要求合并所有有交集的区间。
////注意如果在端点处相交，也算有交集。
////输出合并完成后的区间个数。
////例如：[1, 3] 和[2, 6] 可以合并为一个区间[1, 6]。
////
////输入格式:
////第一行包含整数 n。
////接下来 n 行，每行包含两个整数 l 和 r。
////
////输出格式:
////共一行，包含一个整数，表示合并区间完成后的区间个数。
////
////数据范围:
////1≤n≤100000,
////−109≤li≤ri≤109
////
////输入样例：
////5
////1 2
////2 4
////5 6
////7 8
////7 9
////
////输出样例：
////3
//
//
//#define _CRT_SECURE_NO_WARNINGS
//
//#include <iostream>
//#include <vector>
//#include <algorithm>
//
//
//using namespace std;
//
//typedef pair<int, int> PII;
//vector<PII> a;
//int n;
//
//// int merge(){  
//// 如果直接返回值的话也是可以的，我这里采用的是STL里面的直接把 res 数组和 a 数组里面的值给交换了
//// STL 里面的vector类的成员主要是三个指针加一个记录数组长度的变量，所以直接swap两个数组的时间复杂度是很低的哦 O(1)
//// 相当于是直接窃取了 res 的结果，hhhh
//void merge() {
//    vector<PII> res;
//    sort(a.begin(), a.end());  // 得排序一下的哦（贪心策略），sort 对于 pair 默认是按 first 排序的哦
//
//    int st = -2e9, ed = -2e9;  // 最开始设置一个虚拟，不存在的区间
//    for (auto x : a) {
//        if (ed < x.first) {  // 得加入 res 数组了哦
//            if (st != -2e9) res.push_back({ st, ed });
//            else if (st == -2e9)  // 第一次
//                st = x.first, ed = x.second;
//        }
//        ed = max(ed, x.second);
//    }
//    // 最后一个情况也注意得判断
//    if (st != -2e9) res.push_back({ st, ed });
//
//    // return res;
//    swap(a, res);
//}
//
//int main(void) {
//    cin >> n;
//    for (int i = 0; i < n; i++) {
//        int l, r;
//        cin >> l >> r;
//        a.push_back({ l, r });
//    }
//
//    // 把数组 a 里面的区间合并一下
//    merge();
//
//    // 打印数组 a 里面的区间合并后的个数，就是我们所要的答案
//    cout << a.size() << endl;
//
//    return 0;
//}
//
